package com.csxy.six;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

@Data
public class R2<T> { // 添加泛型参数 T
    @Schema(description = "是否成功")
    private boolean success;

    @Schema(description = "响应码")
    private Integer code;

    @Schema(description = "返回信息")
    private String message;

    @Schema(description = "返回数据")
    private T data; // 使用泛型类型

    // 无参构造方法私有
    private R2() {
    }

    // 成功静态方法 - 带数据
    public static <T> R2<T> ok(T data) {
        R2<T> r = new R2<>();
        r.setSuccess(true);
        r.setCode(ResultCode.SUCCESS);
        r.setMessage("成功");
        r.setData(data);
        return r;
    }

    // 成功静态方法 - 不带数据
    public static R2<Void> ok() {
        R2<Void> r = new R2<>();
        r.setSuccess(true);
        r.setCode(ResultCode.SUCCESS);
        r.setMessage("成功");
        return r;
    }

    // 错误静态方法
    public static R2<Void> error() {
        R2<Void> r = new R2<>();
        r.setSuccess(false);
        r.setCode(ResultCode.ERROR);
        r.setMessage("失败");
        return r;
    }

    // 链式方法
    public R2<T> success(Boolean success) {
        this.setSuccess(success);
        return this;
    }

    public R2<T> code(Integer code) {
        this.setCode(code);
        return this;
    }

    public R2<T> message(String message) {
        this.setMessage(message);
        return this;
    }

    // 注意：移除了 data(key, value) 方法
    // 因为现在使用强类型 data 字段
}